package _2_2基础算法;

import java.util.Scanner;

public class _797差分_acwing {
	static int N = 100010;
	static int a[] = new int[N]; // 原数组
	static int b[] = new int[N]; // 构造的差分数组
	static int n;// 数组长度
	static int m;// 查询次数
	
	public static void main(String[] args) {

		Scanner scan = new Scanner(System.in);
		n = scan.nextInt();
		m = scan.nextInt();
		// 输入数组(从下标1开始
		for(int i = 1;i <= n; i++) {
			a[i] = scan.nextInt();
		}
		// 构造差分数组(从下标1开始
		for(int i = 1;i <= n; i++) {
			// 差分：减去前一个a加上当前a
			// 如果下标是1，前一个则是0，所以这里遍历是从下标1开始
			b[i] = b[i] - a[i-1] + a[i];
			// 更高级的方式--> insert(i,i,a[i]);
		}
		
		for(int i = 0;i < m;i++) {
			int l,r,c;
			l = scan.nextInt();
			r = scan.nextInt();
			c = scan.nextInt();
			// b是差分数组，后面求a的时候会对其进行前缀和计算，通过前缀和计算可以得到a数组最终的值
			// 现在对b[l] + c ，接下来计算前缀和的时候，b[l]开始之后的所有元素都会因为这里的c，后面也会多了c
			// 由于范围是到r，则对b[r+1]-c，对r后面的元素-c，那么从r+1开始，会把刚才b[l]加的c导致后续加的c抵消掉
			// 就达到了 l-r 范围 +c 的效果
			insert(l,r,c);
		}
		// 计算b的前缀和，得到最终序列
		for(int i = 1;i <= n;i++) {
			b[i] = b[i-1] + b[i];
			// 方式二： b[i] += b[i-1];
		}
		printB();
		
		scan.close();
	}
	
	public static void insert(int l,int r,int c) {
		b[l] += c;
		b[r+1] -= c;
	}
	
	// 遍历
	public static void printB() {
		for (int i = 1; i <= n; i++) {
			System.out.print(b[i] + " ");
		}
	}
}
